{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "lstm",
      "version": "0.3.2",
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "metadata": {
        "id": "xazrh9eIcgTO",
        "colab_type": "code",
        "outputId": "eed0e41e-8fad-4940-bab3-8e0a147e0871",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 383
        }
      },
      "cell_type": "code",
      "source": [
        "!pip install torch\n",
        "!pip install torchtext\n",
        "!python -m spacy download en\n",
        "\n",
        "\n",
        "# K80 gpu for 12 hours\n",
        "import torch\n",
        "from torch import nn, optim\n",
        "from torchtext import data, datasets\n",
        "\n",
        "print('GPU:', torch.cuda.is_available())\n",
        "\n",
        "torch.manual_seed(123)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Requirement already satisfied: torch in /usr/local/lib/python3.6/dist-packages (0.4.1)\n",
            "Requirement already satisfied: torchtext in /usr/local/lib/python3.6/dist-packages (0.3.1)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from torchtext) (1.14.6)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from torchtext) (4.28.1)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from torchtext) (2.18.4)\n",
            "Requirement already satisfied: torch in /usr/local/lib/python3.6/dist-packages (from torchtext) (0.4.1)\n",
            "Requirement already satisfied: urllib3<1.23,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext) (1.22)\n",
            "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext) (3.0.4)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext) (2018.11.29)\n",
            "Requirement already satisfied: idna<2.7,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext) (2.6)\n",
            "Requirement already satisfied: en_core_web_sm==2.0.0 from https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz#egg=en_core_web_sm==2.0.0 in /usr/local/lib/python3.6/dist-packages (2.0.0)\n",
            "\n",
            "\u001b[93m    Linking successful\u001b[0m\n",
            "    /usr/local/lib/python3.6/dist-packages/en_core_web_sm -->\n",
            "    /usr/local/lib/python3.6/dist-packages/spacy/data/en\n",
            "\n",
            "    You can now load the model via spacy.load('en')\n",
            "\n",
            "GPU: True\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<torch._C.Generator at 0x7f355e2783b0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 1
        }
      ]
    },
    {
      "metadata": {
        "id": "sPOkbQz1dfMS",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "\n",
        "\n",
        "TEXT = data.Field(tokenize='spacy')\n",
        "LABEL = data.LabelField(dtype=torch.float)\n",
        "train_data, test_data = datasets.IMDB.splits(TEXT, LABEL)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "LodNOFuEeRuv",
        "colab_type": "code",
        "outputId": "742cd4b9-10a2-4de8-f0e3-2c525b3d5364",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        }
      },
      "cell_type": "code",
      "source": [
        "print('len of train data:', len(train_data))\n",
        "print('len of test data:', len(test_data))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "len of train data: 25000\n",
            "len of test data: 25000\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "gnQaJuCLee2o",
        "colab_type": "code",
        "outputId": "fb9424f5-2604-4680-c472-2557c0988817",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 72
        }
      },
      "cell_type": "code",
      "source": [
        "print(train_data.examples[15].text)\n",
        "print(train_data.examples[15].label)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "['Well', 'when', 'watching', 'this', 'film', 'late', 'one', 'night', 'I', 'was', 'simple', 'amazed', 'by', 'it', \"'s\", 'greatness', '.', 'Fantastic', 'script', ',', 'great', 'acting', ',', 'costumes', 'and', 'special', 'effects', ',', 'and', 'the', 'plot', 'twists', ',', 'wow', '!', '!', 'In', 'fact', 'if', 'you', 'can', 'see', 'the', 'ending', 'coming', 'you', 'should', 'become', 'a', 'writer', 'yourself.<br', '/><br', '/>Great', ',', 'I', 'would', 'recommend', 'this', 'film', 'to', 'anyone', ',', 'especially', 'if', 'I', 'don;t', 'like', 'them', 'much.<br', '/><br', '/>Terrific']\n",
            "pos\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "u3R5sgSme-Tt",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# word2vec, glove\n",
        "TEXT.build_vocab(train_data, max_size=10000, vectors='glove.6B.100d')\n",
        "LABEL.build_vocab(train_data)\n",
        "\n",
        "\n",
        "batchsz = 30\n",
        "device = torch.device('cuda')\n",
        "train_iterator, test_iterator = data.BucketIterator.splits(\n",
        "    (train_data, test_data),\n",
        "    batch_size = batchsz,\n",
        "    device=device\n",
        ")"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "PBKKxxFBgRTM",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "class RNN(nn.Module):\n",
        "    \n",
        "    def __init__(self, vocab_size, embedding_dim, hidden_dim):\n",
        "        \"\"\"\n",
        "        \"\"\"\n",
        "        super(RNN, self).__init__()\n",
        "        \n",
        "        # [0-10001] => [100]\n",
        "        self.embedding = nn.Embedding(vocab_size, embedding_dim)\n",
        "        # [100] => [256]\n",
        "        self.rnn = nn.LSTM(embedding_dim, hidden_dim, num_layers=2, \n",
        "                           bidirectional=True, dropout=0.5)\n",
        "        # [256*2] => [1]\n",
        "        self.fc = nn.Linear(hidden_dim*2, 1)\n",
        "        self.dropout = nn.Dropout(0.5)\n",
        "        \n",
        "        \n",
        "    def forward(self, x):\n",
        "        \"\"\"\n",
        "        x: [seq_len, b] vs [b, 3, 28, 28]\n",
        "        \"\"\"\n",
        "        # [seq, b, 1] => [seq, b, 100]\n",
        "        embedding = self.dropout(self.embedding(x))\n",
        "        \n",
        "        # output: [seq, b, hid_dim*2]\n",
        "        # hidden/h: [num_layers*2, b, hid_dim]\n",
        "        # cell/c: [num_layers*2, b, hid_di]\n",
        "        output, (hidden, cell) = self.rnn(embedding)\n",
        "        \n",
        "        # [num_layers*2, b, hid_dim] => 2 of [b, hid_dim] => [b, hid_dim*2]\n",
        "        hidden = torch.cat([hidden[-2], hidden[-1]], dim=1)\n",
        "        \n",
        "        # [b, hid_dim*2] => [b, 1]\n",
        "        hidden = self.dropout(hidden)\n",
        "        out = self.fc(hidden)\n",
        "        \n",
        "        return out"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "cxq70oc9lK-4",
        "colab_type": "code",
        "outputId": "b7bb2f08-0c99-4ac1-9594-e5e98168c19d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 155
        }
      },
      "cell_type": "code",
      "source": [
        "rnn = RNN(len(TEXT.vocab), 100, 256)\n",
        "\n",
        "pretrained_embedding = TEXT.vocab.vectors\n",
        "print('pretrained_embedding:', pretrained_embedding.shape)\n",
        "rnn.embedding.weight.data.copy_(pretrained_embedding)\n",
        "print('embedding layer inited.')\n",
        "\n",
        "optimizer = optim.Adam(rnn.parameters(), lr=1e-3)\n",
        "criteon = nn.BCEWithLogitsLoss().to(device)\n",
        "rnn.to(device)\n"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "pretrained_embedding: torch.Size([10002, 100])\n",
            "embedding layer inited.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "RNN(\n",
              "  (embedding): Embedding(10002, 100)\n",
              "  (rnn): LSTM(100, 256, num_layers=2, dropout=0.5, bidirectional=True)\n",
              "  (fc): Linear(in_features=512, out_features=1, bias=True)\n",
              "  (dropout): Dropout(p=0.5)\n",
              ")"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "metadata": {
        "id": "_Rw_PZsZnBuJ",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "\n",
        "def binary_acc(preds, y):\n",
        "    \"\"\"\n",
        "    get accuracy\n",
        "    \"\"\"\n",
        "    preds = torch.round(torch.sigmoid(preds))\n",
        "    correct = torch.eq(preds, y).float()\n",
        "    acc = correct.sum() / len(correct)\n",
        "    return acc\n",
        "\n",
        "def train(rnn, iterator, optimizer, criteon):\n",
        "    \n",
        "    avg_acc = []\n",
        "    rnn.train()\n",
        "    \n",
        "    for i, batch in enumerate(iterator):\n",
        "        \n",
        "        # [seq, b] => [b, 1] => [b]\n",
        "        pred = rnn(batch.text).squeeze(1)\n",
        "        # \n",
        "        loss = criteon(pred, batch.label)\n",
        "        acc = binary_acc(pred, batch.label).item()\n",
        "        avg_acc.append(acc)\n",
        "        \n",
        "        optimizer.zero_grad()\n",
        "        loss.backward()\n",
        "        optimizer.step()\n",
        "        \n",
        "        if i%10 == 0:\n",
        "            print(i, acc)\n",
        "        \n",
        "    avg_acc = np.array(avg_acc).mean()\n",
        "    print('avg acc:', avg_acc)\n",
        "    \n",
        "    \n",
        "def eval(rnn, iterator, criteon):\n",
        "    \n",
        "    avg_acc = []\n",
        "    \n",
        "    rnn.eval()\n",
        "    \n",
        "    with torch.no_grad():\n",
        "        for batch in iterator:\n",
        "\n",
        "            # [b, 1] => [b]\n",
        "            pred = rnn(batch.text).squeeze(1)\n",
        "\n",
        "            #\n",
        "            loss = criteon(pred, batch.label)\n",
        "\n",
        "            acc = binary_acc(pred, batch.label).item()\n",
        "            avg_acc.append(acc)\n",
        "        \n",
        "    avg_acc = np.array(avg_acc).mean()\n",
        "    \n",
        "    print('>>test:', avg_acc)\n",
        "        \n",
        "    \n",
        "    "
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "lrjzCiiao4Qw",
        "colab_type": "code",
        "outputId": "ddc45f41-982d-4afc-e1c1-36e96a0a6e76",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 14878
        }
      },
      "cell_type": "code",
      "source": [
        "for epoch in range(10):\n",
        "    \n",
        "    eval(rnn, test_iterator, criteon)\n",
        "    train(rnn, train_iterator, optimizer, criteon)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            ">>test: 0.4997602136050769\n",
            "0 0.46666669845581055\n",
            "10 0.40000003576278687\n",
            "20 0.5\n",
            "30 0.5\n",
            "40 0.4333333671092987\n",
            "50 0.5333333611488342\n",
            "60 0.6000000238418579\n",
            "70 0.5666667222976685\n",
            "80 0.40000003576278687\n",
            "90 0.36666667461395264\n",
            "100 0.5333333611488342\n",
            "110 0.6666666865348816\n",
            "120 0.7333333492279053\n",
            "130 0.4333333671092987\n",
            "140 0.6000000238418579\n",
            "150 0.5333333611488342\n",
            "160 0.5\n",
            "170 0.46666669845581055\n",
            "180 0.6333333849906921\n",
            "190 0.6666666865348816\n",
            "200 0.40000003576278687\n",
            "210 0.46666669845581055\n",
            "220 0.5666667222976685\n",
            "230 0.5\n",
            "240 0.7333333492279053\n",
            "250 0.6666666865348816\n",
            "260 0.6333333849906921\n",
            "270 0.6666666865348816\n",
            "280 0.6000000238418579\n",
            "290 0.7666667103767395\n",
            "300 0.6000000238418579\n",
            "310 0.5666667222976685\n",
            "320 0.8333333730697632\n",
            "330 0.6333333849906921\n",
            "340 0.6000000238418579\n",
            "350 0.6333333849906921\n",
            "360 0.6333333849906921\n",
            "370 0.7000000476837158\n",
            "380 0.7333333492279053\n",
            "390 0.6000000238418579\n",
            "400 0.7666667103767395\n",
            "410 0.7333333492279053\n",
            "420 0.8000000715255737\n",
            "430 0.6666666865348816\n",
            "440 0.7666667103767395\n",
            "450 0.5\n",
            "460 0.46666669845581055\n",
            "470 0.7000000476837158\n",
            "480 0.5333333611488342\n",
            "490 0.36666667461395264\n",
            "500 0.7000000476837158\n",
            "510 0.7000000476837158\n",
            "520 0.5333333611488342\n",
            "530 0.6666666865348816\n",
            "540 0.40000003576278687\n",
            "550 0.5333333611488342\n",
            "560 0.5666667222976685\n",
            "570 0.6666666865348816\n",
            "580 0.6000000238418579\n",
            "590 0.5\n",
            "600 0.6000000238418579\n",
            "610 0.5333333611488342\n",
            "620 0.5666667222976685\n",
            "630 0.5666667222976685\n",
            "640 0.6000000238418579\n",
            "650 0.5333333611488342\n",
            "660 0.6666666865348816\n",
            "670 0.6000000238418579\n",
            "680 0.5333333611488342\n",
            "690 0.4333333671092987\n",
            "700 0.46666669845581055\n",
            "710 0.6333333849906921\n",
            "720 0.5333333611488342\n",
            "730 0.6000000238418579\n",
            "740 0.6000000238418579\n",
            "750 0.7333333492279053\n",
            "760 0.40000003576278687\n",
            "770 0.8666667342185974\n",
            "780 0.40000003576278687\n",
            "790 0.5\n",
            "800 0.5333333611488342\n",
            "810 0.5\n",
            "820 0.5666667222976685\n",
            "830 0.6333333849906921\n",
            "avg acc: 0.5920064268852595\n",
            ">>test: 0.5261790834688883\n",
            "0 0.6000000238418579\n",
            "10 0.6333333849906921\n",
            "20 0.7000000476837158\n",
            "30 0.6666666865348816\n",
            "40 0.7000000476837158\n",
            "50 0.7000000476837158\n",
            "60 0.5333333611488342\n",
            "70 0.7000000476837158\n",
            "80 0.7000000476837158\n",
            "90 0.7333333492279053\n",
            "100 0.7666667103767395\n",
            "110 0.7000000476837158\n",
            "120 0.9000000357627869\n",
            "130 0.8000000715255737\n",
            "140 0.8333333730697632\n",
            "150 0.6333333849906921\n",
            "160 0.7000000476837158\n",
            "170 0.9333333969116211\n",
            "180 0.8333333730697632\n",
            "190 0.7666667103767395\n",
            "200 0.8666667342185974\n",
            "210 0.8333333730697632\n",
            "220 0.8666667342185974\n",
            "230 0.8000000715255737\n",
            "240 0.7000000476837158\n",
            "250 0.9000000357627869\n",
            "260 0.8000000715255737\n",
            "270 0.8666667342185974\n",
            "280 0.8333333730697632\n",
            "290 0.8333333730697632\n",
            "300 0.7000000476837158\n",
            "310 0.8666667342185974\n",
            "320 0.8000000715255737\n",
            "330 0.8000000715255737\n",
            "340 0.7666667103767395\n",
            "350 0.9333333969116211\n",
            "360 0.8666667342185974\n",
            "370 0.8000000715255737\n",
            "380 0.8333333730697632\n",
            "390 0.9000000357627869\n",
            "400 0.8666667342185974\n",
            "410 0.7666667103767395\n",
            "420 0.7666667103767395\n",
            "430 0.6666666865348816\n",
            "440 0.9000000357627869\n",
            "450 0.8333333730697632\n",
            "460 0.9000000357627869\n",
            "470 0.8333333730697632\n",
            "480 0.7666667103767395\n",
            "490 0.9000000357627869\n",
            "500 0.9000000357627869\n",
            "510 0.8666667342185974\n",
            "520 0.9000000357627869\n",
            "530 0.8666667342185974\n",
            "540 0.7333333492279053\n",
            "550 0.9000000357627869\n",
            "560 0.9333333969116211\n",
            "570 0.9000000357627869\n",
            "580 0.8000000715255737\n",
            "590 0.8333333730697632\n",
            "600 0.8666667342185974\n",
            "610 0.8333333730697632\n",
            "620 0.8000000715255737\n",
            "630 0.8666667342185974\n",
            "640 0.9666666984558105\n",
            "650 0.8666667342185974\n",
            "660 0.8000000715255737\n",
            "670 0.9000000357627869\n",
            "680 0.8333333730697632\n",
            "690 0.9000000357627869\n",
            "700 0.8333333730697632\n",
            "710 0.8333333730697632\n",
            "720 0.9000000357627869\n",
            "730 0.8333333730697632\n",
            "740 0.8000000715255737\n",
            "750 0.9333333969116211\n",
            "760 0.8000000715255737\n",
            "770 0.8666667342185974\n",
            "780 0.8666667342185974\n",
            "790 0.8000000715255737\n",
            "800 0.8666667342185974\n",
            "810 0.8333333730697632\n",
            "820 0.8000000715255737\n",
            "830 0.9333333969116211\n",
            "avg acc: 0.8121503265641576\n",
            ">>test: 0.8781375387589708\n",
            "0 0.9333333969116211\n",
            "10 0.9000000357627869\n",
            "20 0.9333333969116211\n",
            "30 0.7666667103767395\n",
            "40 0.8666667342185974\n",
            "50 0.9000000357627869\n",
            "60 0.9666666984558105\n",
            "70 0.8333333730697632\n",
            "80 0.8000000715255737\n",
            "90 0.9000000357627869\n",
            "100 0.9666666984558105\n",
            "110 0.8333333730697632\n",
            "120 0.9666666984558105\n",
            "130 0.8666667342185974\n",
            "140 0.8666667342185974\n",
            "150 0.9333333969116211\n",
            "160 0.8000000715255737\n",
            "170 0.7666667103767395\n",
            "180 0.9333333969116211\n",
            "190 0.8000000715255737\n",
            "200 0.9000000357627869\n",
            "210 0.9333333969116211\n",
            "220 0.9000000357627869\n",
            "230 0.7666667103767395\n",
            "240 0.9666666984558105\n",
            "250 0.8666667342185974\n",
            "260 0.9666666984558105\n",
            "270 0.9666666984558105\n",
            "280 0.9000000357627869\n",
            "290 0.8666667342185974\n",
            "300 0.9000000357627869\n",
            "310 0.9333333969116211\n",
            "320 0.9000000357627869\n",
            "330 0.8666667342185974\n",
            "340 0.9333333969116211\n",
            "350 0.9000000357627869\n",
            "360 0.9000000357627869\n",
            "370 0.9333333969116211\n",
            "380 0.9333333969116211\n",
            "390 0.8333333730697632\n",
            "400 0.9333333969116211\n",
            "410 0.9333333969116211\n",
            "420 0.8666667342185974\n",
            "430 0.8333333730697632\n",
            "440 0.9000000357627869\n",
            "450 0.9666666984558105\n",
            "460 0.8333333730697632\n",
            "470 0.9000000357627869\n",
            "480 0.8333333730697632\n",
            "490 0.9000000357627869\n",
            "500 0.8666667342185974\n",
            "510 0.9333333969116211\n",
            "520 0.8666667342185974\n",
            "530 0.8333333730697632\n",
            "540 0.9000000357627869\n",
            "550 0.9666666984558105\n",
            "560 0.9666666984558105\n",
            "570 0.9000000357627869\n",
            "580 0.9333333969116211\n",
            "590 0.8333333730697632\n",
            "600 0.8333333730697632\n",
            "610 0.9666666984558105\n",
            "620 0.9000000357627869\n",
            "630 0.9333333969116211\n",
            "640 0.9666666984558105\n",
            "650 0.9333333969116211\n",
            "660 0.9666666984558105\n",
            "670 0.9333333969116211\n",
            "680 0.8000000715255737\n",
            "690 0.9000000357627869\n",
            "700 0.9000000357627869\n",
            "710 0.8666667342185974\n",
            "720 0.9333333969116211\n",
            "730 0.7666667103767395\n",
            "740 0.9333333969116211\n",
            "750 0.9333333969116211\n",
            "760 0.9666666984558105\n",
            "770 0.8000000715255737\n",
            "780 0.9333333969116211\n",
            "790 0.9000000357627869\n",
            "800 0.9333333969116211\n",
            "810 0.9333333969116211\n",
            "820 0.9333333969116211\n",
            "830 0.8000000715255737\n",
            "avg acc: 0.89184657182339\n",
            ">>test: 0.8595524055780552\n",
            "0 0.9000000357627869\n",
            "10 0.9000000357627869\n",
            "20 0.9333333969116211\n",
            "30 0.9333333969116211\n",
            "40 0.9333333969116211\n",
            "50 0.8666667342185974\n",
            "60 0.8333333730697632\n",
            "70 0.9000000357627869\n",
            "80 0.8666667342185974\n",
            "90 0.8666667342185974\n",
            "100 0.9666666984558105\n",
            "110 0.9666666984558105\n",
            "120 1.0\n",
            "130 0.8666667342185974\n",
            "140 0.9666666984558105\n",
            "150 0.9666666984558105\n",
            "160 0.9000000357627869\n",
            "170 0.9333333969116211\n",
            "180 0.9000000357627869\n",
            "190 0.9000000357627869\n",
            "200 0.8333333730697632\n",
            "210 0.9333333969116211\n",
            "220 0.9333333969116211\n",
            "230 0.9000000357627869\n",
            "240 0.8333333730697632\n",
            "250 0.8666667342185974\n",
            "260 0.9666666984558105\n",
            "270 0.9666666984558105\n",
            "280 0.9333333969116211\n",
            "290 0.9666666984558105\n",
            "300 0.9000000357627869\n",
            "310 0.9333333969116211\n",
            "320 0.9333333969116211\n",
            "330 0.9000000357627869\n",
            "340 0.9000000357627869\n",
            "350 0.9000000357627869\n",
            "360 0.9666666984558105\n",
            "370 0.8666667342185974\n",
            "380 0.9666666984558105\n",
            "390 0.8333333730697632\n",
            "400 0.9333333969116211\n",
            "410 0.9000000357627869\n",
            "420 0.8333333730697632\n",
            "430 0.9000000357627869\n",
            "440 0.9000000357627869\n",
            "450 0.9000000357627869\n",
            "460 0.9333333969116211\n",
            "470 0.8000000715255737\n",
            "480 0.9333333969116211\n",
            "490 0.9333333969116211\n",
            "500 0.9666666984558105\n",
            "510 0.9333333969116211\n",
            "520 0.9333333969116211\n",
            "530 0.8666667342185974\n",
            "540 0.9000000357627869\n",
            "550 0.9333333969116211\n",
            "560 0.9000000357627869\n",
            "570 0.9000000357627869\n",
            "580 0.9333333969116211\n",
            "590 0.8000000715255737\n",
            "600 0.8666667342185974\n",
            "610 0.9666666984558105\n",
            "620 0.9333333969116211\n",
            "630 0.9000000357627869\n",
            "640 0.9333333969116211\n",
            "650 0.9000000357627869\n",
            "660 0.9333333969116211\n",
            "670 0.8000000715255737\n",
            "680 0.9000000357627869\n",
            "690 0.9000000357627869\n",
            "700 0.9000000357627869\n",
            "710 0.8000000715255737\n",
            "720 0.8666667342185974\n",
            "730 0.9666666984558105\n",
            "740 0.9666666984558105\n",
            "750 0.9666666984558105\n",
            "760 0.9333333969116211\n",
            "770 0.9000000357627869\n",
            "780 0.8666667342185974\n",
            "790 0.8666667342185974\n",
            "800 0.9333333969116211\n",
            "810 0.9333333969116211\n",
            "820 0.9333333969116211\n",
            "830 0.8666667342185974\n",
            "avg acc: 0.9173062009205349\n",
            ">>test: 0.8850919751526355\n",
            "0 0.8666667342185974\n",
            "10 0.9000000357627869\n",
            "20 0.8666667342185974\n",
            "30 0.8666667342185974\n",
            "40 0.9666666984558105\n",
            "50 0.9333333969116211\n",
            "60 0.9000000357627869\n",
            "70 0.9666666984558105\n",
            "80 1.0\n",
            "90 0.9333333969116211\n",
            "100 0.8666667342185974\n",
            "110 0.8333333730697632\n",
            "120 0.9000000357627869\n",
            "130 0.9666666984558105\n",
            "140 1.0\n",
            "150 1.0\n",
            "160 0.9333333969116211\n",
            "170 0.7333333492279053\n",
            "180 0.9000000357627869\n",
            "190 0.9000000357627869\n",
            "200 1.0\n",
            "210 0.9666666984558105\n",
            "220 0.9000000357627869\n",
            "230 0.8666667342185974\n",
            "240 0.9333333969116211\n",
            "250 0.9333333969116211\n",
            "260 0.9000000357627869\n",
            "270 0.9666666984558105\n",
            "280 0.9333333969116211\n",
            "290 0.9333333969116211\n",
            "300 0.9333333969116211\n",
            "310 0.9333333969116211\n",
            "320 0.8333333730697632\n",
            "330 0.8666667342185974\n",
            "340 0.9000000357627869\n",
            "350 0.9666666984558105\n",
            "360 0.8000000715255737\n",
            "370 0.9666666984558105\n",
            "380 0.9666666984558105\n",
            "390 0.9333333969116211\n",
            "400 1.0\n",
            "410 0.9666666984558105\n",
            "420 1.0\n",
            "430 0.9666666984558105\n",
            "440 1.0\n",
            "450 0.8333333730697632\n",
            "460 0.8666667342185974\n",
            "470 0.9666666984558105\n",
            "480 0.8666667342185974\n",
            "490 0.9000000357627869\n",
            "500 0.9666666984558105\n",
            "510 0.9333333969116211\n",
            "520 0.9666666984558105\n",
            "530 0.9000000357627869\n",
            "540 0.9666666984558105\n",
            "550 0.9333333969116211\n",
            "560 0.9666666984558105\n",
            "570 0.9333333969116211\n",
            "580 0.9666666984558105\n",
            "590 1.0\n",
            "600 1.0\n",
            "610 0.9000000357627869\n",
            "620 0.9333333969116211\n",
            "630 0.8666667342185974\n",
            "640 0.9666666984558105\n",
            "650 0.9333333969116211\n",
            "660 1.0\n",
            "670 0.9000000357627869\n",
            "680 0.9666666984558105\n",
            "690 0.8666667342185974\n",
            "700 0.9333333969116211\n",
            "710 0.8666667342185974\n",
            "720 1.0\n",
            "730 0.9333333969116211\n",
            "740 0.9666666984558105\n",
            "750 0.9666666984558105\n",
            "760 0.9666666984558105\n",
            "770 1.0\n",
            "780 1.0\n",
            "790 0.9000000357627869\n",
            "800 0.9333333969116211\n",
            "810 0.9333333969116211\n",
            "820 0.9666666984558105\n",
            "830 0.9333333969116211\n",
            "avg acc: 0.930255836863026\n",
            ">>test: 0.8738209919320593\n",
            "0 0.9333333969116211\n",
            "10 1.0\n",
            "20 0.9000000357627869\n",
            "30 0.9666666984558105\n",
            "40 0.8000000715255737\n",
            "50 0.9666666984558105\n",
            "60 0.9666666984558105\n",
            "70 1.0\n",
            "80 0.9666666984558105\n",
            "90 0.9666666984558105\n",
            "100 0.9000000357627869\n",
            "110 0.9000000357627869\n",
            "120 0.9666666984558105\n",
            "130 0.9000000357627869\n",
            "140 0.9333333969116211\n",
            "150 0.9000000357627869\n",
            "160 0.9666666984558105\n",
            "170 1.0\n",
            "180 0.9666666984558105\n",
            "190 1.0\n",
            "200 0.9666666984558105\n",
            "210 0.9666666984558105\n",
            "220 0.9000000357627869\n",
            "230 0.9333333969116211\n",
            "240 0.9000000357627869\n",
            "250 0.9666666984558105\n",
            "260 0.9666666984558105\n",
            "270 0.9666666984558105\n",
            "280 0.9333333969116211\n",
            "290 0.9333333969116211\n",
            "300 0.9333333969116211\n",
            "310 0.9666666984558105\n",
            "320 0.9333333969116211\n",
            "330 0.9666666984558105\n",
            "340 0.9666666984558105\n",
            "350 0.8666667342185974\n",
            "360 0.9333333969116211\n",
            "370 0.9666666984558105\n",
            "380 0.8333333730697632\n",
            "390 0.9333333969116211\n",
            "400 0.8666667342185974\n",
            "410 0.9666666984558105\n",
            "420 0.9333333969116211\n",
            "430 0.9666666984558105\n",
            "440 0.9000000357627869\n",
            "450 0.9000000357627869\n",
            "460 0.9333333969116211\n",
            "470 0.9333333969116211\n",
            "480 0.9666666984558105\n",
            "490 1.0\n",
            "500 0.9333333969116211\n",
            "510 0.9666666984558105\n",
            "520 0.9333333969116211\n",
            "530 0.9666666984558105\n",
            "540 0.8333333730697632\n",
            "550 0.9000000357627869\n",
            "560 0.9666666984558105\n",
            "570 0.9000000357627869\n",
            "580 0.9666666984558105\n",
            "590 1.0\n",
            "600 0.9000000357627869\n",
            "610 0.9333333969116211\n",
            "620 1.0\n",
            "630 0.9333333969116211\n",
            "640 0.9666666984558105\n",
            "650 0.9666666984558105\n",
            "660 0.9666666984558105\n",
            "670 0.9333333969116211\n",
            "680 0.8666667342185974\n",
            "690 0.9333333969116211\n",
            "700 0.9666666984558105\n",
            "710 0.9666666984558105\n",
            "720 0.9333333969116211\n",
            "730 0.9000000357627869\n",
            "740 0.9666666984558105\n",
            "750 1.0\n",
            "760 0.8666667342185974\n",
            "770 1.0\n",
            "780 0.8666667342185974\n",
            "790 0.9333333969116211\n",
            "800 0.9333333969116211\n",
            "810 0.9666666984558105\n",
            "820 1.0\n",
            "830 0.9333333969116211\n",
            "avg acc: 0.9423661449258562\n",
            ">>test: 0.8875300253180863\n",
            "0 0.9666666984558105\n",
            "10 1.0\n",
            "20 0.9666666984558105\n",
            "30 0.9666666984558105\n",
            "40 0.9333333969116211\n",
            "50 0.9333333969116211\n",
            "60 0.9333333969116211\n",
            "70 0.9000000357627869\n",
            "80 0.9333333969116211\n",
            "90 0.9333333969116211\n",
            "100 1.0\n",
            "110 0.9666666984558105\n",
            "120 0.8666667342185974\n",
            "130 0.9666666984558105\n",
            "140 0.9000000357627869\n",
            "150 0.9333333969116211\n",
            "160 0.9333333969116211\n",
            "170 1.0\n",
            "180 0.9666666984558105\n",
            "190 0.9333333969116211\n",
            "200 0.9000000357627869\n",
            "210 0.9666666984558105\n",
            "220 1.0\n",
            "230 0.9666666984558105\n",
            "240 0.9333333969116211\n",
            "250 0.9666666984558105\n",
            "260 0.9000000357627869\n",
            "270 0.9666666984558105\n",
            "280 0.9333333969116211\n",
            "290 0.9333333969116211\n",
            "300 0.9666666984558105\n",
            "310 1.0\n",
            "320 0.9666666984558105\n",
            "330 0.9666666984558105\n",
            "340 1.0\n",
            "350 0.9666666984558105\n",
            "360 1.0\n",
            "370 0.9666666984558105\n",
            "380 1.0\n",
            "390 0.9666666984558105\n",
            "400 0.9333333969116211\n",
            "410 1.0\n",
            "420 0.9666666984558105\n",
            "430 0.9333333969116211\n",
            "440 0.8666667342185974\n",
            "450 0.8666667342185974\n",
            "460 0.9666666984558105\n",
            "470 0.9666666984558105\n",
            "480 0.9333333969116211\n",
            "490 1.0\n",
            "500 0.9666666984558105\n",
            "510 0.9666666984558105\n",
            "520 1.0\n",
            "530 0.9666666984558105\n",
            "540 1.0\n",
            "550 0.9333333969116211\n",
            "560 0.9333333969116211\n",
            "570 0.9333333969116211\n",
            "580 0.9000000357627869\n",
            "590 1.0\n",
            "600 0.9333333969116211\n",
            "610 1.0\n",
            "620 1.0\n",
            "630 0.9000000357627869\n",
            "640 1.0\n",
            "650 0.9333333969116211\n",
            "660 0.9333333969116211\n",
            "670 0.9333333969116211\n",
            "680 0.8666667342185974\n",
            "690 0.9000000357627869\n",
            "700 0.9333333969116211\n",
            "710 0.7000000476837158\n",
            "720 0.9666666984558105\n",
            "730 0.9333333969116211\n",
            "740 1.0\n",
            "750 1.0\n",
            "760 1.0\n",
            "770 1.0\n",
            "780 0.9666666984558105\n",
            "790 1.0\n",
            "800 0.9333333969116211\n",
            "810 0.8000000715255737\n",
            "820 0.9666666984558105\n",
            "830 0.9666666984558105\n",
            "avg acc: 0.9476419227014629\n",
            ">>test: 0.8856914953933918\n",
            "0 0.9000000357627869\n",
            "10 0.9333333969116211\n",
            "20 0.9333333969116211\n",
            "30 0.9333333969116211\n",
            "40 0.9666666984558105\n",
            "50 0.9666666984558105\n",
            "60 1.0\n",
            "70 0.9666666984558105\n",
            "80 1.0\n",
            "90 1.0\n",
            "100 0.9333333969116211\n",
            "110 1.0\n",
            "120 1.0\n",
            "130 0.9666666984558105\n",
            "140 0.9333333969116211\n",
            "150 0.9333333969116211\n",
            "160 0.9333333969116211\n",
            "170 1.0\n",
            "180 1.0\n",
            "190 0.9666666984558105\n",
            "200 0.9666666984558105\n",
            "210 0.9333333969116211\n",
            "220 0.9666666984558105\n",
            "230 0.9666666984558105\n",
            "240 1.0\n",
            "250 0.8666667342185974\n",
            "260 0.9666666984558105\n",
            "270 0.9666666984558105\n",
            "280 0.9333333969116211\n",
            "290 0.9666666984558105\n",
            "300 0.9333333969116211\n",
            "310 1.0\n",
            "320 0.9666666984558105\n",
            "330 0.9333333969116211\n",
            "340 0.9333333969116211\n",
            "350 0.9333333969116211\n",
            "360 0.9333333969116211\n",
            "370 0.9000000357627869\n",
            "380 0.9666666984558105\n",
            "390 0.9333333969116211\n",
            "400 1.0\n",
            "410 0.9666666984558105\n",
            "420 1.0\n",
            "430 0.9666666984558105\n",
            "440 1.0\n",
            "450 0.8333333730697632\n",
            "460 0.9333333969116211\n",
            "470 0.9666666984558105\n",
            "480 0.9666666984558105\n",
            "490 0.8666667342185974\n",
            "500 1.0\n",
            "510 0.9000000357627869\n",
            "520 0.9666666984558105\n",
            "530 0.9000000357627869\n",
            "540 0.9333333969116211\n",
            "550 1.0\n",
            "560 0.9333333969116211\n",
            "570 0.9666666984558105\n",
            "580 0.9333333969116211\n",
            "590 0.9666666984558105\n",
            "600 0.9333333969116211\n",
            "610 0.9666666984558105\n",
            "620 1.0\n",
            "630 1.0\n",
            "640 0.9666666984558105\n",
            "650 0.9666666984558105\n",
            "660 0.9666666984558105\n",
            "670 0.9666666984558105\n",
            "680 1.0\n",
            "690 0.9333333969116211\n",
            "700 0.9333333969116211\n",
            "710 0.9666666984558105\n",
            "720 0.9000000357627869\n",
            "730 0.9666666984558105\n",
            "740 1.0\n",
            "750 1.0\n",
            "760 1.0\n",
            "770 0.9666666984558105\n",
            "780 0.9666666984558105\n",
            "790 1.0\n",
            "800 0.9666666984558105\n",
            "810 0.9333333969116211\n",
            "820 0.9666666984558105\n",
            "830 0.9000000357627869\n",
            "avg acc: 0.955435684401926\n",
            ">>test: 0.8800959719313706\n",
            "0 0.9666666984558105\n",
            "10 0.9000000357627869\n",
            "20 1.0\n",
            "30 0.9666666984558105\n",
            "40 1.0\n",
            "50 0.9333333969116211\n",
            "60 0.8666667342185974\n",
            "70 1.0\n",
            "80 0.9666666984558105\n",
            "90 0.9666666984558105\n",
            "100 1.0\n",
            "110 0.9666666984558105\n",
            "120 1.0\n",
            "130 1.0\n",
            "140 0.9333333969116211\n",
            "150 0.9666666984558105\n",
            "160 0.9333333969116211\n",
            "170 0.9666666984558105\n",
            "180 0.9666666984558105\n",
            "190 1.0\n",
            "200 1.0\n",
            "210 0.9333333969116211\n",
            "220 1.0\n",
            "230 1.0\n",
            "240 1.0\n",
            "250 0.9333333969116211\n",
            "260 1.0\n",
            "270 0.9666666984558105\n",
            "280 1.0\n",
            "290 0.9666666984558105\n",
            "300 1.0\n",
            "310 0.9666666984558105\n",
            "320 1.0\n",
            "330 1.0\n",
            "340 0.9333333969116211\n",
            "350 0.9333333969116211\n",
            "360 1.0\n",
            "370 0.9333333969116211\n",
            "380 1.0\n",
            "390 0.9666666984558105\n",
            "400 0.8666667342185974\n",
            "410 1.0\n",
            "420 0.9666666984558105\n",
            "430 0.9666666984558105\n",
            "440 1.0\n",
            "450 0.9000000357627869\n",
            "460 0.9333333969116211\n",
            "470 1.0\n",
            "480 0.9333333969116211\n",
            "490 1.0\n",
            "500 0.9666666984558105\n",
            "510 0.9333333969116211\n",
            "520 0.9333333969116211\n",
            "530 1.0\n",
            "540 0.9666666984558105\n",
            "550 0.9666666984558105\n",
            "560 0.9666666984558105\n",
            "570 1.0\n",
            "580 1.0\n",
            "590 0.9333333969116211\n",
            "600 0.9666666984558105\n",
            "610 0.9666666984558105\n",
            "620 0.9333333969116211\n",
            "630 0.9000000357627869\n",
            "640 0.9000000357627869\n",
            "650 0.9666666984558105\n",
            "660 0.9666666984558105\n",
            "670 0.9666666984558105\n",
            "680 0.9666666984558105\n",
            "690 0.9666666984558105\n",
            "700 0.9000000357627869\n",
            "710 0.9000000357627869\n",
            "720 1.0\n",
            "730 0.9000000357627869\n",
            "740 0.9333333969116211\n",
            "750 0.9333333969116211\n",
            "760 0.9333333969116211\n",
            "770 1.0\n",
            "780 0.8666667342185974\n",
            "790 1.0\n",
            "800 0.9666666984558105\n",
            "810 1.0\n",
            "820 0.9000000357627869\n",
            "830 0.9666666984558105\n",
            "avg acc: 0.9621503096547344\n",
            ">>test: 0.8820943735200438\n",
            "0 1.0\n",
            "10 1.0\n",
            "20 1.0\n",
            "30 1.0\n",
            "40 1.0\n",
            "50 1.0\n",
            "60 1.0\n",
            "70 0.9666666984558105\n",
            "80 0.9333333969116211\n",
            "90 0.9666666984558105\n",
            "100 0.9666666984558105\n",
            "110 0.9666666984558105\n",
            "120 0.9333333969116211\n",
            "130 1.0\n",
            "140 1.0\n",
            "150 0.9666666984558105\n",
            "160 0.9666666984558105\n",
            "170 1.0\n",
            "180 1.0\n",
            "190 0.9333333969116211\n",
            "200 1.0\n",
            "210 1.0\n",
            "220 0.9666666984558105\n",
            "230 1.0\n",
            "240 0.9666666984558105\n",
            "250 1.0\n",
            "260 0.9333333969116211\n",
            "270 0.9666666984558105\n",
            "280 1.0\n",
            "290 1.0\n",
            "300 0.9333333969116211\n",
            "310 0.9666666984558105\n",
            "320 1.0\n",
            "330 1.0\n",
            "340 1.0\n",
            "350 0.9333333969116211\n",
            "360 0.9333333969116211\n",
            "370 0.9666666984558105\n",
            "380 1.0\n",
            "390 1.0\n",
            "400 0.9666666984558105\n",
            "410 0.9666666984558105\n",
            "420 1.0\n",
            "430 0.9666666984558105\n",
            "440 1.0\n",
            "450 0.9333333969116211\n",
            "460 0.9333333969116211\n",
            "470 0.9666666984558105\n",
            "480 1.0\n",
            "490 0.9666666984558105\n",
            "500 0.9666666984558105\n",
            "510 1.0\n",
            "520 0.9666666984558105\n",
            "530 0.9666666984558105\n",
            "540 0.9333333969116211\n",
            "550 0.9666666984558105\n",
            "560 0.9666666984558105\n",
            "570 0.9666666984558105\n",
            "580 0.9666666984558105\n",
            "590 0.9333333969116211\n",
            "600 0.9666666984558105\n",
            "610 0.9666666984558105\n",
            "620 1.0\n",
            "630 1.0\n",
            "640 1.0\n",
            "650 1.0\n",
            "660 0.9666666984558105\n",
            "670 0.9666666984558105\n",
            "680 0.9666666984558105\n",
            "690 0.9333333969116211\n",
            "700 0.9333333969116211\n",
            "710 0.9666666984558105\n",
            "720 0.9333333969116211\n",
            "730 0.9666666984558105\n",
            "740 0.9333333969116211\n",
            "750 0.9666666984558105\n",
            "760 1.0\n",
            "770 0.9333333969116211\n",
            "780 0.9333333969116211\n",
            "790 0.9666666984558105\n",
            "800 1.0\n",
            "810 0.9666666984558105\n",
            "820 0.9666666984558105\n",
            "830 0.9666666984558105\n",
            "avg acc: 0.9673461499545786\n"
          ],
          "name": "stdout"
        }
      ]
    }
  ]
}